// 导入path模块
const path = require('path');
// 导入把index.html托管到根目录的插件
const htmlWebpackPlugin = require('html-webpack-plugin');
// 导入删除dist文件夹的插件
const cleanWebpackPlugin = require('clean-webpack-plugin');
// 导入webpack这个模块
const webpack = require('webpack');
// 导入抽离css样式文件的插件
const extractTextPlugin = require('extract-text-webpack-plugin');
// 导入压缩css样式的插件
const optimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');

module.exports = {
    entry: {
        app: path.join(__dirname, './src/main.js'), // 这是项目的入口文件
        vendors: ['jquery'], // 这是第三方包的名称
    },
    output: {
        path: path.join(__dirname, './dist'),
        filename: 'js/index.js',
    },
    plugins: [
        new htmlWebpackPlugin({
            // 把index.html托管到内存中的插件
            template: path.join(__dirname, './src/index.html'),
            filename: 'index.html',
            minify:{// 提供压缩选项
                removeComments: true,// 移除页面中的注释
                collapseWhitespace: true,// 合并空白字符
                removeAttributeQuotes: true, // 移除属性节点上的引号
            }
        }),
        new cleanWebpackPlugin(['dist']), // 清除文件目录的插件
        new webpack.optimize.CommonsChunkPlugin({
            // 抽离出第三方文件的插件
            name: 'vendors',
            filename: 'js/vendors.js', // 指定抽离出来的第三方文件的包的名字
        }),
        new webpack.optimize.UglifyJsPlugin({
            // 压缩js文件的插件
            compress: {
                warnings: true,
            },
        }),
        // 自定义插件
        new webpack.DefinePlugin({
            'process.env.NODE_ENV': 'production',
        }),
        // 抽离css的插件
        new extractTextPlugin('css/style.css'),
        new optimizeCssAssetsPlugin()
    ],
    module: {
        rules: [
            {
                test: /\.css$/,
                use: extractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: ['css-loader'],
                    publicPath: '../',
                }),
            }, // 匹配css文件打包的配置
            {
                test: /\.less$/,
                use: extractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: ['css-loader', 'less-loader'],
                    publicPath: '../',
                }),
            }, // 匹配less文件打包的配置
            {
                test: /\.scss$/,
                use: extractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: ['css-loader', 'sass-loader'],
                    publicPath: '../',
                }),
            }, // 匹配scss文件打包的配置
            {
                test: /\.jpg|png|gif|bmp$/,
                use: {
                    loader: 'url-loader',
                    options: {
                        name: 'images/[hash:8]-[name].[ext]',
                        limit: 1024 * 100,
                    },
                },
            }, // 匹配图片文件打包的配置
            { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ },
        ],
    },
};
